const fs = require('fs')
const {readFileSync,writeFileSync}=require('fs')
// 利用http创建服务器
require('http').createServer((req,res)=>{
    let uri=req.url
    if(uri==='/'){
        uri='/index.html'
    }else if(uri.startsWith('/font')){
        uri=uri.split('?')[0]
    }
    else if(uri.startsWith('/node_modules')) {
        let data = fs.readFileSync('.' + uri)
        res.end(data)
        return
    } 
    // 处理读取的文件带有?后的参数的文件读取
    else if(uri.includes('?')) {
        uri = uri.split('?')[0]
    }
    else if(uri.startsWith('/api')){
        // 说明这都是ajax请求
        if(uri==='/api/register'&&req.method.toLowerCase()==='post'){
            // 注册-本质是在存储数据
            // 接收数据
            let str=''
            req.on('data',chunk=>{
                str+=chunk.toString()
            })
            req.on('end',()=>{
                console.log(str);
                // 定义对象-准备将字符串转成对象
                let obj={}
                // 将字符串分割
                let arr=str.split('&')
                // 遍历数组
                arr.forEach(item=>{
                    let brr=item.split('=')
                    obj[brr[0]]=brr[1]
                })
                console.log(obj);
                // 存储数据
                // 判断user.json中是否有数据
                // 获取文件中数据
                let data=readFileSync('./user.json','utf-8')
                if(data){
                    // 存在
                    // 转数组
                    data=JSON.parse(data)
                }else{
                    // 不存在
                    data=[]
                }
                data.push(obj)
                // 将data转成json字符串存在user.json中
                data=JSON.stringify(data)
                writeFileSync('./user.json',data)
                // 给ajax响应
                let pbj={
                    code:1,
                    msg:'注册成功'
                }
                res.end(JSON.stringify(pbj))
            })
        }else if(uri === '/api/login') {
            // 登录请求
            // 接收数据
            let str = ''
            req.on('data', chunk => {
                str += chunk.toString()
            })
            req.on('end', () => {
                // console.log(str);
                // 定义对象 - 准备将字符串转成对象
                let obj = {}
                // 将字符串分割
                let arr = str.split('&')
                // 遍历数组
                arr.forEach(item => {
                    let brr = item.split('=')
                    obj[brr[0]] = brr[1]
                })
                console.log(obj);
                // 验证获取到的数据是否在user.json能找到这样一条数据
                // 读取user.json中的数据
                let data = readFileSync('./user.json', 'utf-8')
                if(data) {
                    // 存在
                    // 转成数组
                    data = JSON.parse(data)
                    // 到数组中查找是否有满足条件的数据
                    let user = data.find(item => item.username === obj.username && item.password === obj.password)
                    // 判断是否找到
                    let pbj
                    if(user) {
                        pbj = {
                            code: 1,
                            msg: '登录成功'
                        }
                    } else {
                        pbj = {
                            code: 0,
                            msg: '登录失败'
                        }
                    }
                    res.end(JSON.stringify(pbj))
                } else {
                    // 不存在
                    let pbj = {
                        code: 0,
                        msg: '登录失败'
                    }
                    res.end(JSON.stringify(pbj))
                }
            })
        }else if(uri === '/api/getGoods') {
            let data = fs.readFileSync('./data/goods.json', 'utf-8')
            // console.log(data);
            data = JSON.parse(data)
            res.end(JSON.stringify({
                code: 1,
                msg: '获取数据成功',
                data: data
            }))
        }else if(uri === '/api/getUser') {
            let str = ''
            req.on('data', chunk => {
                str += chunk.toString()
            })
            req.on('end', () => {
                // 将数组转成对象
                let obj = {}
                let arr = str.split('&')
                arr.forEach(item => {
                    let brr = item.split('=')
                    obj[brr[0]] = brr[1]
                })
                // 读取所有用户信息
                let data = fs.readFileSync('./user.json', 'utf-8')
                data = JSON.parse(data)
                
                // 从data中筛选出当前用户的数据
                let userData = data.find(item => item.username === obj.username)
                // 从用户数据中删除密码
                delete userData.password
                res.end(JSON.stringify({
                    code: 1,
                    msg: '获取用户数据成功',
                    data: userData
                }))
            })
        }else if(uri === '/api/updateUser') {
            let str = ''
            req.on('data', chunk => {
                str += chunk.toString()
            })
            req.on('end', () => {
                // 将数组转成对象
                let obj = {}
                let arr = str.split('&')
                arr.forEach(item => {
                    let brr = item.split('=')
                    obj[brr[0]] = brr[1]
                })
                console.log(obj)
                var cookiesArr = req.headers.cookie.split('&');
                
                for(var a=0; a<cookiesArr.length; a++) {
                    var brr = cookiesArr[a].split('=')
                    if(brr[0] === 'username') {
                        var username = brr[1]
                    }
                }
                var data = fs.readFileSync('./user.json', 'utf-8')
                data = JSON.parse(data)
                var userData = data.find(item => item.username === username)
                // var condition = data.find(item => item.username === obj.username)
                // if(condition) {
                //     res.end(JSON.stringify({
                //         code: 0,
                //         msg: '用户名被占用了'
                //     }))
                //     return
                // }
                for(var i in obj) {
                    userData[i] = obj[i]
                }
                fs.writeFileSync('./user.json', JSON.stringify(data))
                res.end(JSON.stringify({
                    code: 1,
                    msg: '用户信息修改成功'
                }))
            })
        }else if(uri === '/api/getPassword') {
            let str = ''
            req.on('data', chunk => {
                str += chunk.toString()
            })
            req.on('end', () => {
                // 将数组转成对象
                let obj = {}
                let arr = str.split('&')
                arr.forEach(item => {
                    let brr = item.split('=')
                    obj[brr[0]] = brr[1]
                })
                // 读取所有用户信息
                let data = fs.readFileSync('./user.json', 'utf-8')
                data = JSON.parse(data)
                
                // 从data中筛选出当前用户的数据
                let userData = data.find(item => item.username === obj.username)
                res.end(JSON.stringify({
                    code: 1,
                    msg: '获取用户数据成功',
                    data: userData
                }))
            })
        }else if(uri === '/api/updatePassword') {
            let str = ''
            req.on('data', chunk => {
                str += chunk.toString()
            })
            req.on('end', () => {
                // 将数组转成对象
                let obj = {}
                let arr = str.split('&')
                arr.forEach(item => {
                    let brr = item.split('=')
                    obj[brr[0]] = brr[1]
                })

                var cookiesArr = req.headers.cookie.split('&');
                for(var a=0; a<cookiesArr.length; a++) {
                    var brr = cookiesArr[a].split('=')
                    if(brr[0] === 'username') {
                        var username = brr[1]
                    }
                }
                var data = fs.readFileSync('./user.json', 'utf-8')
                data = JSON.parse(data)
                var userData = data.find(item => item.username === username)
                var condition = data.find(item => item.username === obj.username)
                if(condition) {
                    res.end(JSON.stringify({
                        code: 0,
                        msg: '用户名被占用了'
                    }))
                    return
                }
                for(var i in obj) {
                    userData[i] = obj[i]
                }
                fs.writeFileSync('./user.json', JSON.stringify(data))
                res.end(JSON.stringify({
                    code: 1,
                    msg: '用户密码修改成功'
                }))
            })
        }
        return
    }

    let data=readFileSync('./static'+uri)
    res.end(data)
}).listen(8898,()=>{console.log('server is running at http://localhost:8898');})

// http://localhost:8898/